    // Copyright (C) 2005  Davis E. King (davis@dlib.net)
    // License: Boost Software License   See LICENSE.txt for the full license.
    #undef DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_
    #ifdef DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_

    #include <string>
    #include <ioswfd>

    namespace dlib
    {

        class cpp_pretty_printer
        {
            /*!
                INITIAL VALUE
                    This object does not have any state associated with it.

                WHAT THIS OBJECT REPRESENTS
                    This object represents an HTML pretty printer for C++ source code.

            !*/

        public:

            cpp_pretty_printer (
            );
            /*!
                ensures
                    - #*this is properly initialized
                throws
                    - std::bad_alloc
            !*/

            virtual ~cpp_pretty_printer (
            );
            /*!
                ensures
                    - any resources associated with *this have been released
            !*/

            void print (
                std::istream& in,
                std::ostream& out,
                const std::string& title
            ) const;
            /*!
                ensures
                    - treats data from in as C++ source code and pretty prints it in
                      HTML and writes it to out.
                    - The title of the HTML document written to out will be title
                throws
                    - std::ios_base::failure
                        If there was a problem writing to out then this exception will
                        be thrown.
                    - any other exception
                        This exception may be thrown if there is any other problem.
            !*/

            void print_and_number (
                std::istream& in,
                std::ostream& out,
                const std::string& title
            ) const;
            /*!
                ensures
                    - treats data from in as C++ source code and pretty prints it in
                      HTML with line numbers and writes it to out.
                    - The title of the HTML document written to out will be title
                throws
                    - std::ios_base::failure
                        If there was a problem writing to out then this exception will
                        be thrown.
                    - any other exception
                        This exception may be thrown if there is any other problem.
            !*/

        private:

            // restricted functions
            cpp_pretty_printer(const cpp_pretty_printer&);        // copy constructor
            cpp_pretty_printer& operator=(const cpp_pretty_printer&);    // assignment operator

        };

    }

    #endif // DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_